This invention relates to programmable logic device technology, and more particularly, to computer systems in which programmable logic is reconfigured to optimize the ability of the system to handle a given application.
The only programmable element in a conventional computer architecture is the microprocessor. The microprocessor is manufactured with a fixed instruction set that cannot be customized for specific applications. The microprocessor is flexible in that it can run virtually any software-implemented function of an application. The speed of execution of a given function, however, is generally substantially slower when implemented to execute on a microprocessor. This is because software-implemented functions must be fairly complex to accommodate the microprocessor""s generic instruction set.
With conventional computer architectures, software will typically only run on a limited range of platforms. If an application engineer decides to write an application to be run on a given microprocessor, the instruction set the application engineer may use is limited to the one permanently resident on the microprocessor. The application engineer must therefore select whether an application is better suited for a hardware platform or a software platform. Although software platforms are often preferred due to the inflexibility and inefficiency of hardware-based systems, in many cases, the generic instruction set resident on a microprocessor results in inadequate performance for a particular type of software application. For example, graphics-intensive applications usually require hardware that is specifically suited for the particular graphical elements of the application, such as 3-D rendering. In order to circumvent the difficulties associated with programming for a hardware platform, engineers turn to software, which in many cases greatly reduces the application""s speed.
Recently, the notion of a reconfigurable computer based on programmable logic devices has been proposed. The goal of a reconfigurable computer is to increase performance over a conventional computer by providing parallelism and rapid execution times through the use of customizable hardware. Increased flexibility can be achieved by using programmable logic devices, because the logic of such devices may be reconfigured by loading new configuration data into the devices. This allows the reconfigurable computer to provide a large number of instruction sets, rather than a single instruction set for a conventional computer. A greater number of functions may be provided using a fixed amount of hardware if the computer uses reconfigurable logic.
It is an object of the present invention to provide improved reconfigurable computers based on programmable logic devices that may be reprogrammed to optimize the ability of the computer to handle a given application.
This and other objects of the invention are accomplished in accordance with the principles of the present invention by providing a reconfigurable computer system based on programmable logic.
An application engineer developing an application for the reconfigurable computer need not be concerned with the details of which resources are available on that computer. A hardware abstraction is used that is based on the size of a single programmable logic device or a subset of a programmable logic device. When an application is compiled, the functions of the application that are implemented in hardware are partitioned into blocks containing configuration data that are the same size as a programmable logic device or smaller.
The reconfigurable computer system is modular and scalable. If more hardware resources are added, system performance increases. It is not necessary to recompile the application to obtain the benefit of the increased performance.
The reconfigurable computer system allows both hardware and software implementations of a function to exist simultaneously during run-time. A virtual computer operating system is used to select which implementation to run depending on the resources that are available at run-time. Software development tools may be provided that allow an application engineer to use a high-level language to develop both a hardware implementation and a software implementation for an application that may be executed on a reconfigurable computer system using programmable logic resources. These tools may include a partitioner that automatically partitions a specification written in a system design language made up of functions and constraints into software functions and hardware functions. The software functions and hardware functions may be compiled into threads and programmable logic resource configuration data, respectively. The threads and configuration data may be used by the virtual computer operating system at run-time to execute the application.
The reconfigurable computer system provides mechanisms for an application engineer to specify performance requirements for an application. For example, a graphics application may require a particular throughput in terms of the number of polygons that may drawn on a display screen per unit time. If it is required that a million polygons be drawn per second, for example, the application engineer may specify to the virtual computer operating system that the function that draws the polygon must complete its operation in one microsecond.
The virtual computer operating system has the capability to monitor the performance of applications (as well as their individual functions) running within the system and has the capability to reallocate more resources to a particular application or to an individual function to ensure that it meets its performance requirements. The virtual computer operating system may also determine whether to execute the software version or the hardware version of a particular function depending on the performance of the system at the time the function is to be executed. For example, if the polygon drawing function is scheduled to execute at the same time as another computationally intensive application is executing, the dynamic profiling being performed by the virtual computer operating system may take this into consideration when determining resource allocation and whether to use the software version of the polygon drawing function or the hardware version of the polygon drawing function.
A virtual computer operating system is provided that allocates the functions of the application among the programmable logic resources. The virtual computer operating system may include a virtual computer kernel services component. The virtual computer kernel services component may include various resource managers including a virtual logic resource manager.
During run-time, if a particular reconfigurable computer system has a virtual operating system with virtual logic capabilities, the virtual logic manager may control the swapping of programmable logic configuration data and application state information between programmable logic resources and a secondary storage device. This allows reconfigurable computer systems with limited resources to implement complex applications.
Further features of the invention, its nature and various advantages will be more apparent from the accompanying drawings and the following detailed description of the preferred embodiments.